<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //判断两个数组是否想等
      //接收参数是一个数组
      Array.prototype.equal = function (arr) {
        //首先判断传入的值是否是一个空值 如果是空值就返回false
        if (!arr) {
          return false;
        }

        //判断传入值是否是一个数组
        if (!Array.isArray(arr)) {
          return false;
        }
        //判断this和arr长度是否一致
        if (this.length !== arr.length) {
          return false;
        }

        //遍历数组
        for (let i = 0; i < this.length; i++) {
          //判断他们的元素是否还是数组 如果是就递归
          if (Array.isArray(this[i]) && Array.isArray(arr[i])) {
            //如果递归的值也不等 返回false
            if (!this[i].equal(arr[i])) {
              return false;
            }
          } else {
            //如果不相等就返回false
            if (this[i] !== arr[i]) {
              return false;
            }
          }
        }

        //如果全都没返回false则返回true
        return true;
      };
      //优化 让方法不被in枚举
      Object.defineProperty(Array.prototype, "equal", {
        enumerable: false,
      });

      let arr = [1, [2, 3, 4], 3, 4];
      // for (const key in arr) {
      //   console.log(key);
      // }
      let arr1 = [1, [2, 3, 4], 3, 4];

      let arr2 = ["1", "a", "b"];
      let arr3 = [1, "a", "b"];
      console.log(arr.equal(arr1)); //true
    </script>
  </body>
</html>
